package com.itheima.extends5override; // 包声明：定义该类所在的文件夹路径，帮助管理类的组织结构
  
public class Test2 { // 公共类Test2：程序的主类，public表示可以被其他包访问
    public static void main(String[] args) { // 主方法：程序的入口点，JVM会从这里开始执行代码
        // 目标：方法重写的常见应用场景：子类重写Object的toString方法，以便返回对象的内容。
        Student s = new Student("赵敏", '女', 25); // 创建Student类的对象：使用带参构造方法初始化姓名、性别和年龄
        //System.out.println(s.toString()); // 注释掉的代码：显式调用toString方法，默认会返回对象的地址信息
        System.out.println(s); // 输出对象s：直接输出对象时，会默认调用对象的toString方法
        // 注意1：直接输出对象，默认会调用Object的toString方法（可以省略不写调用toString的代码），返回对象的地址信息
        // 注意2：输出对象的地址实际上是没有什么意义的，开发中更希望输出对象时看对象的内容信息，所以子类需要重写Object的toString方法。
        //     以便以后输出对象时默认就近调用子类重写的toString方法返回对象的内容。
    } // Student类结束 // getAge方法结束 // getSex方法结束 // getName方法结束 // 无参构造方法结束 // toString方法结束 // 主方法结束
}


class Student { // Student类：表示学生的类，默认继承自Object类
    private String name; // 私有成员变量name：存储学生姓名，private修饰表示只能在类内部访问
    private char sex; // 私有成员变量sex：存储学生性别，private修饰表示只能在类内部访问
    private int age; // 私有成员变量age：存储学生年龄，private修饰表示只能在类内部访问

    @Override // 方法重写的校验注解：标记这个方法是重写Object类的toString方法
    public String toString() { // 重写Object类的toString方法：返回对象的内容信息而不是地址
        return "Student{" +
                "name='" + name + "'" +
                ", sex=" + sex +
                ", age=" + age +
                '}'; // 返回格式化的字符串，包含Student对象的所有属性值
    }

    public Student() { // 无参构造方法：用于创建空的Student对象
    }

    public Student(String name, char sex, int age) { // 带参构造方法：用于创建并初始化Student对象
        this.name = name; // 使用this关键字区分成员变量和局部变量，将参数name赋值给成员变量name
        this.sex = sex; // 使用this关键字区分成员变量和局部变量，将参数sex赋值给成员变量sex
        this.age = age; // 使用this关键字区分成员变量和局部变量，将参数age赋值给成员变量age
    } // 带参构造方法结束

    public String getName() { // getter方法：用于获取name属性的值，提供了对私有变量的受控访问
        return name; // 返回name属性的值
    }

    public void setName(String name) { // setter方法：用于设置name属性的值，提供了对私有变量的受控修改
        this.name = name; // 使用this关键字区分成员变量和局部变量，将参数name赋值给成员变量name
    } // setName方法结束

    public char getSex() { // getter方法：用于获取sex属性的值，提供了对私有变量的受控访问
        return sex; // 返回sex属性的值
    }

    public void setSex(char sex) { // setter方法：用于设置sex属性的值，提供了对私有变量的受控修改
        this.sex = sex; // 使用this关键字区分成员变量和局部变量，将参数sex赋值给成员变量sex
    } // setSex方法结束

    public int getAge() { // getter方法：用于获取age属性的值，提供了对私有变量的受控访问
        return age; // 返回age属性的值
    }

    public void setAge(int age) { // setter方法：用于设置age属性的值，提供了对私有变量的受控修改
        this.age = age; // 使用this关键字区分成员变量和局部变量，将参数age赋值给成员变量age
    } // setAge方法结束
}